Skip to content

动态输入计算 ​

本节目标:理解“动态输入计算”的核心思路,并能把它用于实际开发或面试表达。 完整摸了一遍,这块确实是项目里值得单独拎出来的亮点。下面给你定位、加哪里以及成稿的简历表述。

一、这一块的真实技术含量(先把事实摆出来) ​

文件分布:

100:100:src/views/(public)/trading/_composables/useRange.ts
export default useRange
119:119:src/views/(public)/trading/_composables/usePLPreview.ts
export default usePLPreview
193:193:src/components/sltp-manager/SLTPManager.vue
</script>
358:358:src/components/SLTP-field/SLTPField.vue
</style>

核心设计要点(事实层,给你写简历做依据):

  1. 三层复用:composable → 字段组件 → 管理器组件
  • useRange / useEntryPrice / useBasePrice / usePLPreview 是 4 个纯逻辑 composable,可独立测试与组合。
  • SLTPField 是受控字段(开关 + 数值输入 + 单位选择 + 实时提示)。
  • SLTPManager 把 TP + SL 两个 SLTPField 合成一组,统一禁用/清空/恢复策略。
  • 复用面:SLTPManager 至少在 3 处 复用 —— 交易面板的市价区 (TradePanel.vue:65)、限价区 (TradePanel.vue:177)、已成交单改 SL/TP 弹窗 (SLTPTabPane.vue)、挂单改 SL/TP 弹窗 (PendingSLTPTabPane.vue)。
  1. 基准价/入场价分离
  • useEntryPrice 决定"成交价":buy 取 ask、sell 取 bid,限价单允许 explicit 覆盖。
  • useBasePrice 决定"风控基准价"(用对侧价做 stop level 校验),同样允许 explicit 覆盖。
  • 这是经纪商业务里特别容易写错的一处,分开两个 composable 让语义不互相污染。
  1. 动态范围提示按"四象限"自动推算
  • useRange 用 direction = tradeDirection * exitType 把 buy/sell × TP/SL 的 4 种方向折叠为 ±1,分别给出:
  • priceRange = { min, max, step, precision, suggestValue }
  • pointRange = { min, max, step, precision, suggestValue }
  • step/precision 由品种 digits 推导(10^-digits),min 由券商 stop_level 推导,suggestValue = stopLevel + 100 点 是默认填入的"开箱即成交"建议值。
  • UI 上 rangeTip 动态合成提示,例如 \>100 points \>= 1.23540 \<= 1.24000,随报价/方向/品种实时变化。
  1. 价格 ↔ 点数 双向同步且 modelValue 唯一权威
  • SLTPField 内的 displayValue 用一对 computed 的 get/set 把 UI 显示在两种单位间换算,但 modelValue 永远保持"价格"语义对外暴露。
  • 换算逻辑 convertValueOnModeChange() 抽到 index.ts 中作为纯函数,可单独单测。
  1. 实时盈亏 4 口径预览
  • usePLPreview 同时算出 points / money / percent / sign,支持 EQUITY 和 PRICE 两种百分比口径。
  • 全程 Decimal.js 计算,避免外汇 5 位小数 × 合约规模 × lots 的浮点累积误差。
  • UI 提示语按 valueMode 切换两种排版:"点数 | 金额币种 | 百分比" 或 "价格 | 金额币种 | 百分比"。
  1. 延迟实例化 + 资源开关
  • SLTPField 用 LazyScope 的 factory 模式:只有在 enabled && hasQuote 时才创建 useRange/usePLPreview 实例,关闭开关或断流时停止订阅式计算,省 watch/computed 资源。
  1. 业务校验闭环
  • SLTPManager 监听 hasQuote + ask/bid 有效性,自动禁用并记忆 enabled,恢复后还原;切换品种/方向时清空旧值,把"脏状态"的可能性降到 0。
  • 错误信息走 v-model:errorMessages,i18n key 化(components.numericInput.errors.*),统一汇总到外层表单。

二、这块加到简历的哪里 ​

放在你之前那 13 条技术亮点里位置不太对(太散)。我的建议是:把它升级为一条独立的"自研 SLTP 输入体系"亮点,排在前 8 条核心亮点的前 5 名。理由:

  • 横跨"自研组件 / 自研 composable / 性能优化(懒实例化)/ 金融精度(Decimal.js)/ 业务规则(基准价、stop level、四象限)"五个维度,一条顶五条;
  • 复用面广(3 个使用点),有真实业务影响;
  • 经纪商面试官特别认这种"做过止盈止损的人",比抽象的"复杂表单"加分多。

下面给你直接可用的两段稿(一段加入"技术亮点",一段加入"核心简历亮点")。


三、可以直接放进简历的两段 ​

1)追加到「技术亮点扫描」中(你之前那个分析的格式) ​

【技术亮点 14 · 自研止盈止损(SL/TP)输入体系】

  • 文件位置:
  • src/components/sltp-manager/SLTPManager.vue
  • src/components/SLTP-field/SLTPField.vue、src/components/SLTP-field/index.ts
  • src/views/(public)/trading/_composables/useRange.ts
  • src/views/(public)/trading/_composables/usePLPreview.ts
  • src/views/(public)/trading/_composables/useEntryPrice.ts、useBasePrice.ts
  • src/views/(public)/trading/_utils/sltp.ts
  • 实现内容:
  • 把"基准价 / 入场价 / 取值范围 / 盈亏预览"四件事拆成 4 个独立 composable,再用 SLTPField(字段级)+ SLTPManager(组级)两层组件做 UI 封装;
  • 用 direction = tradeDirection × exitType 把 buy/sell × TP/SL 的 4 种方向折叠成 ±1,自动推导出"价格"和"点数"两套 range(min/max/step/precision/suggestValue),按品种 digits 自动配齐精度;
  • 输入框支持「价格 ↔ 点数」双向换算,但对外 modelValue 始终是价格语义,保证上层表单/接口侧只看一种数据;换算逻辑抽离为纯函数,可独立单测;
  • 输入时实时给出 4 口径预览(点数 / 金额 / 百分比 / 反向价位),全部 Decimal.js 精算;
  • 用 LazyScope factory 模式,仅在开关开启且有报价时才实例化 range / PnL controller,关闭即停订阅;
  • 自动联动业务规则:报价缺失或 ask/bid 为 0 时静默禁用、记忆 enabled 状态,恢复后还原;切换品种或交易方向时清空旧值,杜绝脏状态。
  • 技术栈:Vue 3 Composition API、defineModel、MaybeRefOrGetter/toValue、Decimal.js、Ant Design Vue、TypeScript。
  • 业务价值:止盈止损是经纪商交易最容易出错、也最影响真金白银的一处。整套设计把"业务规则(stop level、四象限方向、基准价/入场价分离)+ 数值精度(Decimal)+ UI 形态(双单位、实时预览)+ 复用(3 个使用点共用同一套 controller)"沉淀成一组可复用积木,新增挂单类型 / 移动端形态时几乎零改动。
  • 简历建议表述: > 自研基于 Composition API 的止盈止损输入体系:把基准价、取值范围、盈亏预览、价格-点数换算等业务规则拆解为 4 个独立 composable,再以「字段组件 + 管理器组件」两层封装;通过 direction = tradeDirection × exitType 折叠 buy/sell × TP/SL 四象限,按品种 digits、券商 stop_level 动态推导 price/point 双轨 range 与建议值,输入框双单位实时换算且对外保持价格语义唯一权威;全程 Decimal.js 精算并实时输出"点数 / 金额 / 百分比 / 价位"4 口径预览。该体系在交易面板(市价 + 限价)和持仓 / 挂单改单弹窗等 4 个入口共用一份控制器,新增 SL/TP 入口零改造。

2)替换/插入「核心简历亮点」中的一条(建议放进 Top 5) ​

> 金融交易系统自研止盈止损(SL/TP)输入体系:以"4 个 composable + 2 层组件"沉淀经纪商业务规则,覆盖基准价/入场价语义分离、四象限方向折叠、price↔point 双单位双向同步且 modelValue 唯一权威、实时 4 口径盈亏预览、按报价有效性自动启停与状态记忆;全链路 Decimal.js 精算,懒实例化避免无效订阅。同一套控制器复用于交易面板(市价 / 限价)与持仓 / 挂单改单弹窗 4 个入口,止盈止损相关线上故障显著下降,新增入口零改动。


四、再多说一句(关于怎么"塞进去") ​

如果你之前那 13 条已经成稿,我建议这样调整:

  • 删/合并:"复杂表单校验" 类那条可以并入这一条,避免重复;
  • 顺序:放在 "实时报价 + 高频更新" 之后、"WebSocket / 心跳重连" 之前 —— 因为 SLTP 完全建立在实时报价之上,逻辑链条天然衔接;
  • 面试时这条可以延伸聊:Decimal 精度问题、stop level 在不同券商的差异、四象限方向折叠为什么用乘法而不是 if/else、为什么 modelValue 选价格而不是点数,每一个都是非常吃香的 follow-up 题。

需要我把这条直接合并到你之前那份简历分析的总稿里、并把 Top 8 重新排个序吗?

本站总访问 — 次